package com.chenjt.netty.two_socket.chat.server;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;

/**
 * 注释：聊天室
 * 服务器启动，之后会有N个客户端与服务端建立连接，第一个客户端建立连接之后什么都没发生，
 * 1.当第二个或以上更多客户端连接上来时，服务器端会打印xxx上线，同时会发送给其他客户端都 xxx上线 的提示消息
 * 2.客户端下线之后，服务器端会打印xxx下线，同时会发送给其他客户端会收到 xxx下线 的提示消息
 * 3.a客户端发送消息时，此客户端以及其他在线的客户端都会收到消息
 *      a显示的是 我 发送的消息
 *      其他客户端显示的是 a 发送的消息
 *
 *
 * @author chenjt
 * @date 2024/8/8 17:03
 */
public class MyChatServer {

    public static void main(String[] args) throws InterruptedException {
        NioEventLoopGroup bossGroup = new NioEventLoopGroup();
        NioEventLoopGroup workerGroup = new NioEventLoopGroup();

        try {
            ServerBootstrap serverBootstrap = new ServerBootstrap();
            serverBootstrap.group(bossGroup,workerGroup)
                    .channel(NioServerSocketChannel.class)
                    // 使用handler针对的是bossGroup相关的一些信息，比如连接进来之后对连接进行一些日志的输出
//                    .handler()
                    // childHandler针对的是workerGroup相关的一些信息
                    .childHandler(new MyChatInitializer());

            // sync()表示netty会一直在这里等待
            ChannelFuture channelFuture = serverBootstrap.bind(8899).sync();
            channelFuture.channel().closeFuture().sync();
        } finally {
            bossGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();
        }

    }

}
